package com.study.lu.动态规划;

import java.util.Arrays;

public class 删除并获得点数 {
    /**
     * 给你一个整数数组nums，你可以对它进行一些操作。
     * 每次操作中，选择任意一个nums[i]，删除它并获得nums[i]的点数。之后，你必须删除 所有 等于nums[i] - 1 和 nums[i] + 1的元素。
     * 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
     * <p>
     * 题解：。
     * 类似打家劫舍。打家劫舍不能取相邻的， 否则会报警。
     * 这个整数组会存在重复的数。那么我们用一个新的数组把重复的数值进行累加
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] nums = new int[]{3, 4, 2};
        // 获取最大的值
        int maxVal = Arrays.stream(nums).max().getAsInt();
        // 根据最大值创建数组
        int[] newNums = new int[maxVal + 1];
        // 合并数组中重复的数值
        for (int i : nums) {
            newNums[i] += i;
        }

        int r = rob(newNums);
        System.out.println(r);

    }

    private static int rob(int[] nums) {
        int length = nums.length;
        if (1 == length) {
            return nums[0];
        }
        int first = nums[0];
        int second = Math.max(nums[0], nums[1]);
        int temp = 0;
        for (int i = 2; i < length; i++) {
            temp = second;
            second = Math.max(first + nums[i], second);
            first = temp;
        }

        return second;
    }
}
